// ===================================
//
//          zebra.h
// (改进版 - 稳健防抖 + 连续帧确认)
//
// ===================================

#ifndef ZEBRA_H
#define ZEBRA_H

#include <stdbool.h>
#include <stdint.h>

// -----------------------------------
// 斑马线状态机类型
// -----------------------------------
enum zebra_type_e {
    ZEBRA_NONE = 0,         // 默认巡线状态
    ZEBRA_FOUND_FIRST,      // 首次检测到斑马线
    ZEBRA_DEBOUNCING,       // 防抖阶段，确保斑马线稳定
    ZEBRA_STOP_FINAL,       // 第二次检测 → 停车
    ZEBRA_NUM,              //状态机总数
};

/* ---------------- 外部接口声明 ---------------- */

extern enum zebra_type_e zebra_type;    //当前斑马线状态
extern const char *zebra_type_name[ZEBRA_NUM];   //状态机类型名称，用于调试输出

/* ---------------- 函数接口 ---------------- */

/**
 * @brief 初始化斑马线状态机
 */
void zebra_logic_init(void);

/**
 * @brief 检查是否进入斑马线检测（入口逻辑）
 */
void check_zebra(void);

/**
 * @brief 运行状态机：用于处理斑马线的防抖与第二次确认停车逻辑
 * - 通过编码器检测判断是否离开第一条斑马线，进入 DEBOUNCING 阶段。
 * - 如果第二次确认检测到斑马线，触发停车，进入 STOP_FINAL。
 */
void run_zebra(void);

/**
 * @brief 返回检测到的斑马线次数（0/1/2）
 */
int zebra_get_count(void);

/**
 * @brief 判断是否需要停车，仅在 ZEBRA_STOP_FINAL 状态时返回 true。
 * 该函数可用于主控制循环判断是否触发停车。
 */
bool zebra_should_car_stop(void);

#endif // ZEBRA_H
